package main

import "fmt"

func main() {
	//运算标识符
	//calcFlag()

	//inputData()

	//switch分支
	//switchExp()

	//	循环
	//forE()

	//	go语言特有的一种迭代结构 for range 可以遍历数组，切片，字符串，map及通道，for range 语法类似于其他语言的foreach语句，一般形式为
	//forrange()

	//	跳转goto
	gotoFunc()
}

func calcFlag() {
	//	 + 号，1 正号，2，相加，3 字符串

	var n = +10
	fmt.Println(n)

	fmt.Println(3 + 5 + 7)

	fmt.Println("a" + "b" + "c")

	// / 除号

	// 整数
	fmt.Println(10 / 3)
	fmt.Println(10.0 / 3)

	//	%取模
	//1
	fmt.Println(10 % 3)
	//	-1
	fmt.Println(-10 % 3)

	//	 --  ++ 只能用在变量之后
	var a = 9
	a--
	fmt.Println(a)
}

var StuName = ""
var StuAge = ""
var StuScore = ""
var IsVip = ""

func inputData() {

	// 键盘录入学生名字
	// 传入指针，可以影响到外面变量的值
	fmt.Println("请输入名字")
	//_, _ = fmt.Scanln(&StuName)
	//fmt.Println("你输入的名字为：", StuName)
	//	 使用空格进行风格
	fmt.Println("请录入学生的年龄，姓名，成绩")
	//fmt.Scan("%d %s %f %t",&int,&str,&float,&bool)

	fmt.Scanf("%s %s %s %s", &StuName, &StuAge, &StuScore, &IsVip)

	fmt.Println("请录入学生的年龄，姓名，成绩", StuName, StuAge, StuScore, IsVip)

}

func switchExp() {

	data := 14
	switch data {
	case 10, 11, 12:
		fmt.Println("A")
	case 13:
		fmt.Println("B")
	case 14:
		fmt.Println("C")
		//fallthrough 可以穿透一层，执行下一个case
		fallthrough
	case 15:
		fmt.Println("D")
	case 16:
		fmt.Println("E")
	}
}

func forE() {

	sum := 0
	for i := 1; i < 50; i++ {
		sum += i
	}
	fmt.Println(sum)

	j := 1 //变量
	for j <= 5 {
		// 也可以只写迭代
		fmt.Println("Let's Go")
		j++
	}

	//	写一个死循环
	for {
		fmt.Println("Let's Go111")
	}

	//	写一个死循环2
	for {
		fmt.Println("Let's Go111")
	}
}

func forrange() {

	var str = "i like golang 我和go"

	// 遍历到中文会乱码
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str[i])
	}

	//	for range  中文占用的字节数不同，所以很奇怪索引并不是连续的
	for index, value := range str {
		fmt.Printf("索引：%d,值：%c", index, value)
		fmt.Println()
	}

	//	break;停止循环，结束离他最近的循环；

	//	多重循环，可以使用标签，来结束指定循环体
label1:
	for i := 0; i < 10; i++ {
	label2:
		for j := 0; j < 5; j++ {
		label3:
			for k := 0; k < 3; k++ {
				if k%2 == 0 {
					break label1
				} else {
					break label3
				}
			}
			break label2
		}
	}
}

func gotoFunc() {
	fmt.Println("golang 1")
	fmt.Println("golang 2")
	fmt.Println("golang 3")
	goto labelTen
	fmt.Println("golang 4")
	fmt.Println("golang 5")
	fmt.Println("golang 6")
	fmt.Println("golang 7")
	fmt.Println("golang 8")
	fmt.Println("golang 9")
labelTen:
	fmt.Println("golang 10")
}
